package com.haisen.dataobject.entity;

import com.alibaba.fastjson.JSON;
import com.haisen.core.utils.DateUtil;
import com.haisen.core.utils.RegexUtil;
import com.haisen.exception.BizException;
import com.haisen.poi.basic_poi.ExcelResources;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.*;

@Slf4j
@Table(name = "tb_buss_item_t")
public class BussItemT {
    /**
     * 编号
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 组织/服务站编号
     */
    @Column(name = "organization_id")
    private Long organizationId;

    /**
     * 服务站
     */
   @Column(name = "organization_name")
    private String organizationName;

    /**
     * 办理渠道，微信，门店，营销方案
     */
    private String mode;

    /**
     * 办理手机号码
     */
    private String phone;

    /**
     * 副卡号码
     */
    @Column(name = "phone_second")
    private String phoneSecond;

    /**
     * 主套餐
     */
    @Column(name = "package_main")
    private String packageMain;

    /**
     * 办理业务类型
     */
    @Column(name = "biz_type")
    private String bizType;

    /**
     * 业务名称
     */
    @Column(name = "biz_name")
    private String bizName;

    /**
     * 原产品规格
     */
    @Column(name = "spec_pri")
    private String specPri;

    /**
     * 新办产品规格
     */
    @Column(name = "spec_cur")
    private String specCur;

    /**
     * 办理工号
     */
    @Column(name = "handle_no")
    private String handleNo;

    /**
     * 办理方式
     */
    @Column(name = "handle_type")
    private String handleType;

    /**
     * 业务办理日期
     */
    @Column(name = "handle_date")
    private String handleDate;

    /**
     * 金额
     */
    @Column(name = "sum_money")
    private BigDecimal sumMoney;

    /**
     * 服务人员
     */
    private String servicer;

    /**
     * 计件酬金
     */
    private BigDecimal reward;

    /**
     * 移动积分
     */
    private Integer score;

    /**
     * 配件差价收入
     */
    private BigDecimal income;

    /**
     * 其他收入
     */
    @Column(name = "income_other")
    private BigDecimal incomeOther;

    @Column(name="")
    private  Integer commission;

    private String remark;

    /**
     * 创建时间
     */
    @Column(name = "create_time")
    private Date createTime;

    /**
     * 修改时间
     */
    @Column(name = "update_time")
    private Date updateTime;

    /**
     * 获取编号
     *
     * @return id - 编号
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置编号
     *
     * @param id 编号
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取组织编号
     *
     * @return organization_id - 组织编号
     */
    public Long getOrganizationId() {
        return organizationId;
    }

    /**
     * 设置组织编号
     *
     * @param organizationId 组织编号
     */
    public void setOrganizationId(Long organizationId) {
        this.organizationId = organizationId;
    }

    /**
     * 获取办理渠道，微信，门店，营销方案
     *
     * @return mode - 办理渠道，微信，门店，营销方案
     */
    @ExcelResources(title = "办理渠道",order = 1)
    public String getMode() {
        return mode;
    }

    /**
     * 设置办理渠道，微信，门店，营销方案
     *
     * @param mode 办理渠道，微信，门店，营销方案
     */
    public void setMode(String mode) {
        this.mode = mode;
    }

    /**
     * 获取办理手机号码
     *
     * @return phone - 办理手机号码
     */
    @ExcelResources(title = "手机号码",order = 2)
    public String getPhone() {
        return phone;
    }

    /**
     * 设置办理手机号码
     *
     * @param phone 办理手机号码
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * 获取副卡号码
     *
     * @return phone_second - 副卡号码
     */
    @ExcelResources(title = "副卡号码",order = 3)
    public String getPhoneSecond() {
        return phoneSecond;
    }

    /**
     * 设置副卡号码
     *
     * @param phoneSecond 副卡号码
     */
    public void setPhoneSecond(String phoneSecond) {
        this.phoneSecond = phoneSecond;
    }

    /**
     * 获取主套餐
     *
     * @return package_main - 主套餐
     */
    @ExcelResources(title = "主套餐" ,order = 4)
    public String getPackageMain() {
        return packageMain;
    }

    /**
     * 设置主套餐
     *
     * @param packageMain 主套餐
     */
    public void setPackageMain(String packageMain) {
        this.packageMain = packageMain;
    }

    /**
     * 获取办理业务类型
     *
     * @return biz_type - 办理业务类型
     */
    @ExcelResources(title = "办理业务",order = 5)
    public String getBizType() {
        return bizType;
    }

    /**
     * 设置办理业务类型
     *
     * @param bizType 办理业务类型
     */
    public void setBizType(String bizType) {
        this.bizType = bizType;
    }

    /**
     * 获取业务名称
     *
     * @return biz_name - 业务名称
     */
    @ExcelResources(title = "业务明细",order = 6)
    public String getBizName() {
        return bizName;
    }

    /**
     * 设置业务名称
     *
     * @param bizName 业务名称
     */
    public void setBizName(String bizName) {
        this.bizName = bizName;
    }

    /**
     * 获取原产品规格
     *
     * @return spec_pri - 原产品规格
     */
    @ExcelResources(title = "原规格产品",order =7)
    public String getSpecPri() {
        return specPri;
    }

    /**
     * 设置原产品规格
     *
     * @param specPri 原产品规格
     */
    public void setSpecPri(String specPri) {
        this.specPri = specPri;
    }

    /**
     * 获取新办产品规格
     *
     * @return spec_cur - 新办产品规格
     */
    @ExcelResources(title = "新办规格产品",order = 8)
    public String getSpecCur() {
        return specCur;
    }

    /**
     * 设置新办产品规格
     *
     * @param specCur 新办产品规格
     */
    public void setSpecCur(String specCur) {
        this.specCur = specCur;
    }

    /**
     * 获取办理工号
     *
     * @return handle_no - 办理工号
     */
    @ExcelResources(title = "办理工号",order = 9)
    public String getHandleNo() {
        return handleNo;
    }

    /**
     * 设置办理工号
     *
     * @param handleNo 办理工号
     */
    public void setHandleNo(String handleNo) {
        this.handleNo = handleNo;
    }

    /**
     * 获取办理方式
     *
     * @return handle_type - 办理方式
     */
    @ExcelResources(title = "办理方式",order = 10)
    public String getHandleType() {
        return handleType;
    }

    /**
     * 设置办理方式
     *
     * @param handleType 办理方式
     */
    public void setHandleType(String handleType) {
        this.handleType = handleType;
    }

    /**
     * 获取金额
     *
     * @return sum_money - 金额
     */
    @ExcelResources(title = "金额",order = 11)
    public BigDecimal getSumMoney() {
        return sumMoney;
    }

    /**
     * 设置金额
     *
     * @param sumMoney 金额
     */
    public void setSumMoney(BigDecimal sumMoney) {
        this.sumMoney = sumMoney;
    }
    public void setSumMoney(String sumMoney) {
        if (StringUtils.isEmpty(sumMoney))
            sumMoney ="0";
        this.sumMoney = BigDecimal.valueOf(Long.valueOf(sumMoney));
    }
    /**
     * 获取服务人员
     *
     * @return servicer - 服务人员
     */
    @ExcelResources(title = "服务人员",order = 12)
    public String getServicer() {
        return servicer;
    }

    /**
     * 设置服务人员
     *
     * @param servicer 服务人员
     */
    public void setServicer(String servicer) {
        this.servicer = servicer;
    }

    /**
     * 获取酬金
     *
     * @return reward - 酬金
     */
    @ExcelResources(title = "计件酬金",order = 13)
    public BigDecimal getReward() {
        return reward;
    }

    /**
     * 设置酬金
     *
     * @param reward 酬金
     */
    public void setReward(BigDecimal reward){
        this.reward = reward;
    }
    public void setReward(String reward) {
        if (StringUtils.isEmpty(reward))
            reward ="0";
        this.reward = BigDecimal.valueOf(Long.valueOf(reward));
    }

    /**
     * 获取积分
     *
     * @return score - 积分
     */
    @ExcelResources(title = "移动积分",order = 14)
    public Integer getScore() {
        return score;
    }

    /**
     * 设置积分
     *
     * @param score 积分
     */
    public void setScore(Integer score) {
        this.score = score;
    }

    /**
     * 获取收入
     *
     * @return income - 收入
     */
    @ExcelResources(title = "手机/套卡/配件差价",order = 15)
    public BigDecimal getIncome() {
        return income;
    }

    public void setIncome(BigDecimal income) {
        this.income = income;
    }

    /**
     * 设置收入
     *
     * @param income 收入
     */

    public void setIncome(String income) {
        log.info("设置income，字符到bigdecimal");
        if (StringUtils.isEmpty(income))
            income ="0";
        this.income = BigDecimal.valueOf(Long.valueOf(income));
    }

    /**
     * 获取其他收入
     *
     * @return income_other - 其他收入
     */
    @ExcelResources(title = "其他收入",order = 16)
    public BigDecimal getIncomeOther() {
        return incomeOther;
    }

    /**
     * 设置其他收入
     *
     * @param incomeOther 其他收入
     */
    public void setIncomeOther(BigDecimal incomeOther){
        this.incomeOther = incomeOther;
    }
    public void setIncomeOther(String incomeOther) {
        if (StringUtils.isEmpty(incomeOther))
            incomeOther ="0";
        this.incomeOther = BigDecimal.valueOf(Long.valueOf(incomeOther));
    }

    @ExcelResources(title = "提成",order = 17 )
    public Integer getCommission() {
        return commission;
    }
    public void setCommission(Integer commission){
        this.commission = commission;
    }
    public void setCommission(String commission) {
        if(StringUtils.isEmpty(commission)){
            commission = "0";
        }
        this.commission = Integer.valueOf(commission);
    }

    /**
     * @return remark
     */
    @ExcelResources(title = "备注",order = 18)
    public String getRemark() {
        return remark;
    }

    /**
     * @param remark
     */
    public void setRemark(String remark) {
        this.remark = remark;
    }

    @ExcelResources(title = "服务站", order = 19)
    public String getOrganizationName() {
        return organizationName;
    }

    public void setOrganizationName(String organizationName) {
        this.organizationName = organizationName;
    }

  @ExcelResources(title = "日期",order = 20)
    public String getHandleDate() {
      return handleDate;
    }

    public void setHandleDate(Date handleDate){
        this.handleDate =  DateUtil.toDateTimeString(handleDate,"yyyy-MM-dd");
    }

    //todo:数据将日期设置成date类型，设计到页面提交字符串的转换特别是poi导入时，日期字段的转化，更复杂，虽然使用dateconvert来转换，但是后面操作和写入时也麻烦，考虑如何优化

    public void setHandleDate(String handleDate) {
        //如果全部为数字，是1900-1-1的日期天数差
        if (RegexUtil.isNumber(handleDate)){
            Double d = Double.parseDouble(handleDate);
            Date date = HSSFDateUtil.getJavaDate(d);
            this.handleDate = DateUtil.toDateTimeString(date,"yyyy-MM-dd");
        } else {
            this.handleDate = handleDate;
        }
    }

    /**
     * 获取创建时间
     *
     * @return create_time - 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置创建时间
     *
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取修改时间
     *
     * @return update_time - 修改时间
     */
    public Date getUpdateTime() {
        return updateTime;
    }

    /**
     * 设置修改时间
     *
     * @param updateTime 修改时间
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}